package com.zz.controller;

import com.zz.dto.GetBed;
import com.zz.dto.PatientLiveIn;
import com.zz.dto.PatientResult;
import com.zz.service.PatientService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;

import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.util.Map;

/**
 * Copyright Zz
 * FileName: PatientController
 * Author:   Zz
 * Date:     2023/6/420:43
 * Description:在院病人控制层
 * hISTORY:
 * <author>  <time>     <version>    <desc>
 * 作者姓名   修改时间       版本号       描述
 */

@Controller
@RequestMapping("patient")
public class PatientController {

    @Autowired
    private PatientService patientService;

    /**
     * 以入院时间分页查询病人信息
     * @return 以入院时间降序排序的一页病人信息
     */
    @ResponseBody
    @GetMapping("ByTime")
    public PatientResult paginationQueryPatientByTime(@RequestParam Map<String,Integer> map){
        return patientService.queryPatientListOrderByTime(map);
    }

    /**
     * number: 1-id 2-姓名 3-性别 4-年龄 5-入住时间 6-病因 7-床,根据number动态sql查询
     * @param map number:查询方式，name查询关键词，startIndex:分页起始位置,pageSize:返回页面大小（也即数据长度）
     * @return 以指定查询方式查询在院病人信息(动态sql中部分为模糊查询)
     */
    @ResponseBody
    @GetMapping("ByNumber")
    public PatientResult queryPatientListByNumber(@RequestParam Map<String, Object> map) {
        return patientService.queryPatientListByNumber(map);
    }

    /**
     * 病人住院
     * @param patientLiveIn 新的入住病人
     * @return 入院是否成功（1成功，2病人已在院，3无此房间, 4房间已满）
     */
    @ResponseBody
    @PostMapping("InsertPatient")
    public GetBed insertPatient(@RequestBody PatientLiveIn patientLiveIn){
        // 日期时差问题
        patientLiveIn.setTime( LocalDate.parse(patientLiveIn.getTime().toString(), DateTimeFormatter.ISO_DATE));
        return patientService.insertPatient(patientLiveIn);
    }

    /**
     * 修改病人信息
     * @param patientLiveIn 病人信息
     * @return 1-成功 0-失败 2-查无此病人记录 3-要转移的房间不存在 4-房间已满
     */
    @ResponseBody
    @PutMapping("updatePatient")
    public GetBed updatePatient(@RequestBody PatientLiveIn patientLiveIn){
        return patientService.updatePatient(patientLiveIn);
    }
}
